import { io } from "socket.io-client";
import { socketIoInterval } from '@/constants/systemInterval';

const socket = io(`http://${window.location.hostname}:22010/`); // 创建一个到指定服务器的 Socket.IO 客户端实例

export default {
    install: (app) => {
        // 在 Vue 应用的全局属性上添加 socket 实例，使其在整个应用中可访问
        app.config.globalProperties.$socket = socket;

        // 添加一个方法来创建和管理 Socket.IO 事件和定时发送数据
        app.config.globalProperties.$createSocketIO = function (params) {
            console.log(params);
            let eventName = params.eventName, // 事件名称
                eventAction = params.eventAction, // 当收到消息时要执行的操作
                reqParams = params.reqParams, // 发送到服务器的数据
                intervalTime = params.intervalTime || socketIoInterval; // 定时发送数据的间隔

            // 监听指定事件，并在事件触发时执行操作
            socket.on(eventName, eventAction);
            // 向服务器发送事件和数据
            socket.emit(eventName, reqParams);
            // 设置定时器定期向服务器发送数据
            let interval = setInterval(function () {
                socket.emit(eventName, reqParams);
            }, intervalTime);
            // 将定时器的引用添加到参数对象中，以便后续操作
            params["interval"] = interval;
            return params;
        };

        // 添加一个方法来移除 Socket.IO 事件监听和停止定时发送数据
        app.config.globalProperties.$offSocket = function (params) {
            if (params) {
                let eventName = params.eventName, // 事件名称
                    interval = params.interval; // 定时器引用
                // 移除事件监听
                socket.off(eventName);
                console.log('socketIO 已停止......');
                // 停止定时器
                if (interval) clearInterval(interval);
            }
        }
    }
};
